#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
int n;
char q[5];
int a,b;
struct node{
    int id;
    int w;
    node(int id,int w):id(id),w(w){}

    //重载< 默认是从大到小 所以要从小到大就应该改为大于号比较
    bool operator <(const node &b)const{
        if(w<b.w){
            return true;
        }
        else if(w>b.w){
            return false;
        }
        else{
            return id>b.id;
        }
} 
};
priority_queue<node> doc[4];
int main(void){
    //freopen("data.txt","r",stdin);
    while(~scanf("%d",&n)){
        for(int i=0;i<4;i++){
            while(!doc[i].empty()){
                doc[i].pop();
            }
        }
        int k=1;
        for(int i=0;i<n;i++){
            scanf("%s %d",q,&a);
            if(q[0]=='I'){
                scanf("%d",&b);
                doc[a].push(node(k,b));
                k++;
            }
            else{
                if(doc[a].empty()){
                    printf("EMPTY\n");
                }
                else{
                    node t=doc[a].top();
                    printf("%d\n",t.id);
                    doc[a].pop();
                }
            }
        }
    }
    return 0;
}